#ifndef __TYPE_DCL_HH__
#define __TYPE_DCL_HH__

#include "BaseTypeDcl.hh"

namespace Reflection
{

/**
 * @class Type
 * @brief Represents type declaration
 */
template< typename TType >
class TypeDcl : public BaseTypeDcl
{
public:
    typedef TType                       Type;
    typedef boost::shared_ptr< TType >  TypePtr;

public: //Derived from BaseTypeDcl
    /**
     * @brief Default ctor
     */
    TypeDcl( void ) : iTypeInfo( typeid( TType ) )
    {
    }
    
    /**
     * @brief Derived from base type.
     */
    virtual const std::type_info& getTypeInfo( void ) const
    {
        return iTypeInfo;
    }
    
private:
    /// remember the type_info value
    const std::type_info& iTypeInfo;
};

} // namespace Reflection

#endif //__TYPE_DCL_HH__
